
#!/bin/bash

# 颜色定义
NC='\033[0m'   # 重置颜色
RED='\033[31m'  # 红色
GREEN='\033[32m' # 绿色
YELLOW='\033[33m' # 黄色
BLUE='\033[34m'  # 蓝色
CYAN='\033[36m'  # 青色
MAGENTA='\033[35m' # 紫色

# 兼容的系统型号
SUPPORTED_OS="Rocky Linux 8, Rocky Linux 9, CentOS 8, CentOS 9"

# 获取系统信息
get_system_info() {
    # 获取操作系统信息
    OS_INFO=$(hostnamectl | grep "Operating System" | sed 's/Operating System: //')
    # 获取时区信息
    TIMEZONE=$(timedatectl | grep "Time zone" | sed 's/Time zone: //')
    # 获取主机名
    HOSTNAME=$(hostname)
    echo -e "${CYAN}当前系统信息:${NC}"
    echo -e "${MAGENTA}操作系统: $OS_INFO${NC}"
    echo -e "${MAGENTA}时区: $TIMEZONE${NC}"
    echo -e "${MAGENTA}主机名: $HOSTNAME${NC}"
    echo -e "${CYAN}------------------------------${NC}"
    echo -e "${YELLOW}兼容的系统型号: $SUPPORTED_OS${NC}"
    echo -e "${CYAN}------------------------------${NC}"
}

# 显示菜单函数
show_menu() {
    clear
    # 显示系统信息
    get_system_info

    echo -e "${BLUE}请选择要执行的操作:${NC}"
    echo -e "${GREEN}1) 安装 Docker${NC}"
    echo -e "${GREEN}2) 卸载 Docker${NC}"
    echo -e "${YELLOW}3) 更新时区${NC}"
    echo -e "${RED}4) 退出${NC}"
    read -p "请输入选项 (1/2/3/4): " choice
    case $choice in
        1) install_docker_menu ;;
        2) uninstall_docker ;;
        3) update_timezone ;;
        4) exit 0 ;;
        *) echo -e "${RED}无效的选择，请重新输入.${NC}" ; show_menu ;;
    esac
}

# 安装 Docker 的函数
install_docker_menu() {
    echo -e "${CYAN}正在更新系统...${NC}"
    sudo dnf update -y

    echo -e "${CYAN}安装依赖工具...${NC}"
    sudo dnf install -y dnf-utils

    REPO_URL="https://download.docker.com/linux/centos/docker-ce.repo"
    REPO_FILE="/etc/yum.repos.d/docker-ce.repo"

    if ! [ -f "$REPO_FILE" ]; then
        echo -e "${CYAN}添加 Docker 仓库...${NC}"
        sudo dnf config-manager --add-repo $REPO_URL
    else
        echo -e "${CYAN}Docker 仓库已存在，跳过添加步骤。${NC}"
    fi

    echo -e "${CYAN}列出可用的 Docker 版本（倒序排列）...${NC}"
    versions=$(sudo dnf list docker-ce --showduplicates | tail -n +2 | sort -r)

    echo -e "${MAGENTA}请选择要安装的 Docker 版本（请输入前置序号）：${NC}"
    echo "$versions" | nl

    # 用户选择版本的函数
    choose_version
}

# 用户选择版本的函数
choose_version() {
    read -p "请输入版本的序号，或输入 'q' 退出: " choice

    # 如果用户输入 'q' 退出
    if [ "$choice" == "q" ]; then
        echo -e "${YELLOW}退出安装。${NC}"
        show_menu
    fi

    version=$(echo "$versions" | sed -n "${choice}p" | awk '{print $2}' | sed 's/^3://')

    if [ -z "$version" ]; then
        echo -e "${RED}无效的选择，请重新选择版本号或输入 'q' 退出。${NC}"
        choose_version
    else
        echo -e "${GREEN}选择的版本是：$version${NC}"
        install_docker "$version"
    fi
}

# 安装 Docker 的函数
install_docker() {
    echo -e "${CYAN}正在安装 Docker 版本 $1 ...${NC}"
    sudo dnf install -y docker-ce-$1 docker-ce-cli-$1 containerd.io

    echo -e "${CYAN}启动 Docker 服务...${NC}"
    sudo systemctl start docker
    sudo systemctl enable docker

    echo -e "${CYAN}验证 Docker 安装...${NC}"
    docker --version

    echo -e "${CYAN}测试 Docker 是否正常工作...${NC}"
    docker run hello-world

    echo -e "${GREEN}Docker 安装完成！${NC}"
    show_menu
}

# 卸载 Docker 的函数
uninstall_docker() {
    echo -e "${CYAN}停止并禁用 docker.socket...${NC}"
    sudo systemctl stop docker.socket
    sudo systemctl disable docker.socket

    echo -e "${CYAN}停止 Docker 服务...${NC}"
    sudo systemctl stop docker
    sudo systemctl disable docker

    echo -e "${CYAN}正在卸载 Docker...${NC}"
    sudo dnf remove -y docker-ce docker-ce-cli containerd.io

    echo -e "${CYAN}删除 Docker 配置文件和数据目录...${NC}"
    sudo rm -rf /var/lib/docker
    sudo rm -rf /etc/docker

    echo -e "${GREEN}Docker 已成功卸载！${NC}"
    show_menu
}

# 更新时区的函数
update_timezone() {
    echo -e "${CYAN}当前时区: $(timedatectl | grep 'Time zone' | sed 's/Time zone: //')${NC}"
    echo -e "${MAGENTA}列出高频的 20 个时区，选择一个时区（通过序号选择）：${NC}"

    # 高频使用的 20 个时区
    timezones=(
        "America/New_York"
        "America/Los_Angeles"
        "America/Chicago"
        "America/Denver"
        "Europe/London"
        "Europe/Paris"
        "Europe/Berlin"
        "Europe/Moscow"
        "Asia/Shanghai"
        "Asia/Tokyo"
        "Asia/Kolkata"
        "Asia/Singapore"
        "Asia/Dubai"
        "Asia/Kuala_Lumpur"
        "Africa/Johannesburg"
        "Australia/Sydney"
        "Australia/Melbourne"
        "Pacific/Auckland"
        "Africa/Nairobi"
        "Europe/Amsterdam"
    )

    # 显示高频时区
    for i in "${!timezones[@]}"; do
        echo "$((i+1)) ${timezones[$i]}"
    done

    read -p "请输入新的时区序号，例如 '1' 或输入 'q' 退出: " choice

    # 如果用户输入 'q' 退出
    if [ "$choice" == "q" ]; then
        echo -e "${YELLOW}退出更新时区。${NC}"
        show_menu
    fi

    # 获取选择的时区
    new_timezone="${timezones[$((choice-1))]}"

    if [ -z "$new_timezone" ]; then
        echo -e "${RED}无效的选择，请重新选择时区序号或输入 'q' 退出。${NC}"
        update_timezone
    else
        echo -e "${CYAN}正在更新时区为: $new_timezone...${NC}"
        sudo timedatectl set-timezone $new_timezone

        # 验证时区是否更改成功
        echo -e "${GREEN}时区已更新为: $(timedatectl | grep 'Time zone' | sed 's/Time zone: //')${NC}"
        show_menu
    fi
}

# 启动菜单
show_menu

